package com.qike.baoxiu.service;

import com.qike.baoxiu.dto.*;
import com.qike.baoxiu.pojo.*;
import com.qike.baoxiu.vo.*;
import org.springframework.web.multipart.MultipartFile;

import java.text.ParseException;
import java.util.List;

/**
 * 订单
 */
public interface OrderService {

    /**
     * 订单统计
     * @param uid
     * @return
     */
    OrderCountVo OrderCount();

    /**
     * 维修单列表
     * @param orderListDto
     * @return
     */
    OrderListVo orderList(OrderListDto orderListDto);

    /**
     * 维修单详情
     * @param id
     * @return
     */
    OrderInfoVo orderInfo(Integer id) throws Exception;

    /**
     * 添加维修单
     * @param addOrderDto
     */
    void addOrder(AddOrderDto addOrderDto) throws Exception;

    /**
     * 人员列表
     * @param fixUserListDto
     * @return
     */
    FixUserListVo fixUserList(FixUserListDto fixUserListDto);

    /**
     * 用户列表
     * @param fixUserListDto
     * @return
     */
    FixUserListVo UserList(FixUserListDto fixUserListDto);

    /**
     * 人员停用启用
     * @param id
     */
    void delUser(Integer id);

    /**
     * 添加人员
     * @param addUserDto
     */
    void addFixUser(AddFixUserDto addUserDto) throws Exception;

    /**
     * 添加用户
     * @param addUserDto
     */
    void addUser(AddUserDto addUserDto) throws Exception;

    /**
     * 报修历史
     * @param UserId
     * @return
     */
    List<OrderHistoryVo> orderHistory(Integer UserId);

    /**
     * 设备详情
     * @param userId
     * @return
     */
    UserDevice deviceInfo(Integer userId);

    /**
     * 设备编辑
     * @param userDevice
     */
    void deviceEdit(UserDevice userDevice);

    /**
     * 知识库列表
     * @param knowledgeListDto
     * @return
     */
    KnowledgeListVo knowledgeList(KnowledgeListDto knowledgeListDto);

    /**
     * 添加知识库
     * @param knowledgeListDto
     */
    void knowledgeAdd(KnowledgeAddDto knowledgeListDto);

    /**
     * 删除知识库
     * @param id
     */
    void knowledgeDel(Integer id);

    /**
     * 上传图片
     * @param file
     * @return
     */
    String upLoadPhoto(MultipartFile file);

    /**
     * 接单
     * @param id
     */
    void receiving(Integer id) throws Exception;



    /**
     * 完成订单/转交
     * @param finishOrderDto
     */
    void finishOrder(FinishOrderDto finishOrderDto) throws Exception;

    /**
     * 企业微信添加用户
     * @param addUserDto
     */
    UserVo PadAddUser(AddUserDto addUserDto);

    /**
     * 搜索知识库
     * @param keyWord
     * @return
     */
    KnowledgeListVo searchKnowledge(SearchKnowledgeDto keyWord);

    /**
     * 消息列表
     * @param messageListDto
     * @return
     */
    MessageListVo messageList(MessageListDto messageListDto);

    /**
     * 读取消息
     * @param id
     */
    void readMessage(Integer id);

    /**
     * 企业微信下单
     * @param weChartAddOrderDto
     */
    void weChartAddOrder(WeChartAddOrderDto weChartAddOrderDto);

    /**
     * 读取用户信息
     * @param weChartUid
     * @return
     */
    UserInfoVo weChartUserInfo(String weChartUid);

    /**
     * 解决方案列表
     * @param fixListDto
     * @return
     */
    FixListVo fixList(FixListDto fixListDto);

    /**
     * 解决方案变更状态
     * @param id
     */
    void fixOrderChangeStatus(Integer id,Integer status);

    /**
     * 未读消息数量
     * @return
     */
    Integer unReadCount();

    /**
     * 工程师列表
     * @param name
     * @return
     */
    List<User> engineList(String name);

    /**
     * 报修单统计报表
     * @param fixOrderCountDto
     * @return
     */
    List<FixOrderCountVo> fixOrderCount(FixOrderCountDto fixOrderCountDto) throws Exception;

    /**
     * 来源渠道统计
     * @param fromCountDto
     * @return
     */
    List<FromCountVo> fromCount(FromCountDto fromCountDto) throws Exception;

    /**
     * 平均响应时间统计
     * @param fixOrderCountDto
     * @return
     */
    List<FixOrderCountVo> avgResponseTimeCount(FixOrderCountDto fixOrderCountDto) throws Exception;

    /**
     * 平均完成时间统计
     * @param fixOrderCountDto
     * @return
     */
    List<FixOrderCountVo> avgFinishTimeCount(FixOrderCountDto fixOrderCountDto) throws Exception;

    /**
     * 评价统计报表
     * @param scoreCountDto
     * @return
     */
    List<ScoreCountMapVo> scoreCount(ScoreCountDto scoreCountDto) throws Exception;

    /**
     * 用户下拉列表
     * @param name
     * @return
     */
    List<UserListMenuVo> UserListMenu(String name,Integer role);

    /**
     * 评价已完成的订单
     * @param scoreFinishOrderDto
     * @return
     */
    Integer scoreFinishOrder(ScoreFinishOrderDto scoreFinishOrderDto) throws Exception;

    /**
     * 未处理消息订单数量
     * @return
     */
    Integer unTakeOrderSize();

    /**
     * 解决方案查询
     * @param searchKnowledgeDto
     * @return
     */
    List<KnowledgeVo> searchFix(SearchKnowledgeDto searchKnowledgeDto);

    /**
     * 字典列表
     * @param name
     * @return
     */
    List<Directory> directoryList(String name);

    /**
     * 添加字典
     * @param addDirectoryDto
     */
    void addDirectory(AddDirectoryDto addDirectoryDto);

    /**
     * 删除字典
     * @param id
     */
    void delDirectory(Integer id) throws Exception;

    /**
     * 子字典列表
     * @param parentId
     * @return
     */
    List<Directory> sonDirectoryList(Integer parentId);

    /**
     * 软件名称列表
     * @return
     */
    List<String> softNameList();

    /**
     * 月报上传
     * @param monthReportDto
     */
    void monthReport(MonthReportDto monthReportDto) throws ParseException;

    /**
     * 全部字典列表
     * @return
     */
    List<AllDirectoryListVo> allDirectoryList();

    /**
     * 判断月报是否需要上传
     * @return
     */
    Boolean monthReportIsUpLoad();

    /**
     * 查看月报
     * @param uid
     * @return
     */
    MonthReport ShowMonthReport(Integer uid);

    /**
     * 删除维修单
     * @param id
     */
    void delOrder(Integer id) throws Exception;

    /**
     * 报修单统计下载
     * @param fixOrderCountDto
     * @return
     */
    List<FixOrderCountDownLoadVo> fixOrderCountDownLoad(FixOrderCountDto fixOrderCountDto) throws ParseException;

    /**
     * 统计下载
     * @param fixOrderCountDto
     * @return
     */
    List<CountDownLoadVo> countDownLoad(FixOrderCountDto fixOrderCountDto) throws ParseException;

    /**
     * 解决方案编辑
     * @param knowledgeEditDto
     */
    void knowledgeEdit(KnowledgeEditDto knowledgeEditDto);

    /**
     * 知识库详情
     * @param id
     * @return
     */
    KnowledgeWithBLOBs knowledgeInfo(Integer id);

    /**
     * 编辑用户
     * @param editUserDto
     */
    void editUser(EditUserDto editUserDto) throws Exception;

    /**
     * 微信下单
     * @param addOrderDto
     */
    void wxAddOrder(WxAddOrderDto addOrderDto) throws Exception;

    /**
     * 报修记录
     * @param orderListDto
     * @return
     */
    WxorderListVo wxOrderList(OrderListDto orderListDto);

    /**
     * 订单详情
     * @param id
     * @return
     */
    WxOrderInfoVo wxOrderInfo(Integer id);

    /**
     * 接单
     * @param accecptOrderDto
     */
    void accecptOrder(AccecptOrderDto accecptOrderDto);

    /**
     * 派单
     * @param accecptOrderDto
     */
    void sendOrder(AccecptOrderDto accecptOrderDto);

    /**
     * 微信登录
     * @param wxLoginDto
     * @return
     */
    WxLoginVo wxLogin(WxLoginDto wxLoginDto) throws Exception;

    /**
     * 根据用户id获取二维码
     * @param userId
     * @return
     */
    GetQRByCarIdVo getQRByCarIdVo(Integer userId);

    /**
     * 微信完成订单
     * @param wxFinishOrderDto
     */
    void wxFinishOrder(WxFinishOrderDto wxFinishOrderDto) throws Exception;
}
